#include "animationstackedwidget.h"

// animationStackedWidget::animationStackedWidget(QWidget *parent)
//     :QStackedWidget(parent)

// {
//     m_nextPageIndex=0;
//     m_isAnimating=false;
// }

// animationStackedWidget::~animationStackedWidget()
// {

// }

// void animationStackedWidget::animation(int pageIndex)
// {  if(m_isAnimating)
//     {
//         return;
//     }

//     m_isAnimating = true;
//     m_nextPageIndex=pageIndex;
//     QPropertyAnimation *animation=new QPropertyAnimation(this,"rotateVal");
//     //设置动画持续时间
//     animation->setDuration(700);
//     animation->setEasingCurve(QEasingCurve::Linear);//动画缓和曲线
//     //设置动画起始值
//     animation->setStartValue(m_startVal);
//     //设置动画结束值
//     animation->setEndValue(m_endVal);

//     connect(animation,&QPropertyAnimation::valueChanged,this,&animationStackedWidget::OnValuechanged);
//     connect(animation,&QPropertyAnimation::finished,this,&animationStackedWidget::OnFinished);
//     //设置动画开始
//     currentWidget()->hide();
//     animation->start();


// }

// void animationStackedWidget::OnValuechanged(const QVariant &value)
// {
//     iRotateVal = value.toFloat();
//     qDebug() << "Rotation value:" << iRotateVal; // 调试输出
//     update();
// }

// void animationStackedWidget::OnFinished()
// {
//     //动画结束
//     widget(m_nextPageIndex)->show();//旋转结束显示第二页
//     widget(m_nextPageIndex)->raise();
//     setCurrentWidget(widget(m_nextPageIndex));
//     iRotateVal = 0;
//     m_isAnimating = false;

//     update(); // 最终重绘

// }

// void animationStackedWidget::paintEvent(QPaintEvent *ev)
// {

//     if(m_isAnimating)

//     {if(iRotateVal<=90)
//     {//旋转

//         QPixmap pix(currentWidget()->size());
//         currentWidget()->render(&pix);//只会绘制当前页图片的所在位置
//         QPainter p(this);//窗口作为画板
//         QTransform transform;
//         transform.translate(width()/2,0);//图片移动到中点
//         transform.rotate(iRotateVal, Qt::YAxis);
//         p.setTransform(transform);
//         p.drawPixmap(-1*width()/2, 0,pix);//换顶点绘制
//     }
//     else
//     {
//         QPixmap pix(widget(m_nextPageIndex)->size());
//         widget(m_nextPageIndex)->render(&pix);
//         QPainter p(this);//窗口作为画板
//         QTransform transform;
//         transform.translate(width()/2,0);
//         transform.rotate(iRotateVal+180, Qt::YAxis);
//         p.setTransform(transform);
//         p.drawPixmap(-1*width()/2, 0,pix);
//     }


//     }
//     else {
//         QWidget::paintEvent(ev);
//     }


// }
animationStackedWidget::animationStackedWidget(QWidget *parent)
    :QStackedWidget(parent)

{
    m_nextPageIndex=0;//第一页
    m_isAnimating=false;//没有旋转
}

animationStackedWidget::~animationStackedWidget()
{

}

void animationStackedWidget::animation(int pagenIdex)
{
    if(m_isAnimating)
    {
        return;
    }
    m_isAnimating=true;//意味着要开始旋转了
    m_nextPageIndex=pagenIdex;
    QPropertyAnimation *animation=new QPropertyAnimation(this,"rotateVal");
    animation->setDuration(1000);//动画持续时间
    animation->setEasingCurve(QEasingCurve::Linear);//旋转的样式

    animation->setStartValue(this->StartVal());//设置动画开始值
    animation->setEndValue(this->EndVal());//设置动画结束值

    connect(animation,&QPropertyAnimation::valueChanged,this,&animationStackedWidget::OnValuehanged);
    connect(animation,&QPropertyAnimation::finished,this,&animationStackedWidget::OnFinished);

    currentWidget()->hide();//隐藏当前页面
    animation->start();//启动旋转

}

void animationStackedWidget::OnValuehanged(const QVariant &value)
{
    iRotateVal=value.toFloat();
    update();
}

void animationStackedWidget::OnFinished()
{
    setCurrentWidget(widget(m_nextPageIndex));//将下一页设置为当前页面
    widget(m_nextPageIndex)->show();//显示当前页面
    widget(m_nextPageIndex)->raise();//最后提到前面

    iRotateVal=0;
    m_isAnimating=false;
   // update();

}

void animationStackedWidget::paintEvent(QPaintEvent *ev)
{
    if(m_isAnimating)
    {
        if(iRotateVal<=90)
        {
            QPainter p(this);
           //获取当前页的截图
            p.setRenderHint(QPainter::Antialiasing); // 使旋转更平滑
            QPixmap pix(currentWidget()->size());//获取当前页的大小并且设置一个空白位图
            currentWidget()->render(&pix);//将当前页面的所有可使内容绘制到QPixmap中
            QTransform tf;
            tf.translate(width()/2,0);
            tf.rotate(iRotateVal,Qt::YAxis);
            p.setTransform(tf);
            p.drawPixmap(-1*width()/2,0,pix);

        }
        else
        {
            QPainter p(this);
            //获取当前页的截图
             p.setRenderHint(QPainter::Antialiasing); // 使旋转更平滑
            QPixmap pix(widget(m_nextPageIndex)->size());//获取当前页的大小并且设置一个空白位图
            widget(m_nextPageIndex)->render(&pix);//将当前页面的所有可使内容绘制到QPixmap中
            QTransform tf;
            tf.translate(width()/2,0);
            tf.rotate(iRotateVal+180,Qt::YAxis);//这里的 +180 实际上是为了让下一个页面从背面开始旋转
            p.setTransform(tf);
            p.drawPixmap(-1*width()/2,0,pix);
        }
    }
    else
    {
        QWidget::paintEvent(ev);//如果不调用 QWidget::paintEvent(ev)：在非动画状态下，子控件可能不会显示背景可能不会正确绘制样式表可能不会生效
    }

}


